package com.camus.utils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.hutool.core.util.StrUtil;

/**
 * 规格解析工具
 *
 * @author: yunfeng.li
 * @since: 2020/2/11 5:26 下午
 * @version: 1.0
 */
public class SpecificationUtil {

    /**
     * 通用解析，根据正则提取规格中所有数字 1. 第一种情况：数字开头，第一个就是规格 2. 第二种情况：字母开头，第二个是规格或者根据配置来决定
     *
     * @param source
     * @return
     */
    public static String parseNormalSpec(String source) {
        if (StrUtil.isBlank(source)) {
            return "";
        }

        Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?");
        boolean startWithLetter = false;
        //判断是否字母开头
        if (source.toUpperCase().charAt(0) >= 'A' && source.toUpperCase().charAt(0) <= 'Z') {
            startWithLetter = true;
        }
        //判断是否汉字开头
        if (source.toUpperCase().charAt(0) >= 0x4E00 && source.toUpperCase().charAt(0) <= 0x9FA5) {
            startWithLetter = true;
        }

        Matcher m = pattern.matcher(source);
        List<String> tempList = new ArrayList<>();
        while (m.find()) {
            String groupValue = m.group();
            if (StrUtil.isNotBlank(groupValue)) {
                tempList.add(groupValue);
            }
        }

        // 如果只有一组数字，立即返回
        if (1 == tempList.size()) {
            return new BigDecimal(tempList.get(0)).stripTrailingZeros().toPlainString();
        }

        int index = 0;
        if (startWithLetter) {
            index = 1;
        }

        if (tempList.size() > 0) {
            String tempVal = tempList.get(index);
            return new BigDecimal(tempVal.trim()).stripTrailingZeros().toPlainString();
        } else {
            return source;
        }
    }
}
